package com.pisolution.scheduler.runtime.queue;

/**
 * 任务队列 用于存储待提交给工作节点的任务实例.
 *
 * @param <T> 任务实例类型.
 *
 * @author sora
 * @version 0.1.0
 */
public interface TaskQueue<T> {
    /**
     * 将给定任务存储与队列中.
     *
     * @param task 待存储任务.
     *
     * @throws Exception 存储任务为空或无法判定部分存储必需条件.
     */
    void put(T task) throws Exception;

    /**
     * 获取队列中存储的任务.
     *
     * @return 队列中存储的首个任务实例.
     *
     * @throws Exception 如果获取过程被其他进程中断.
     */
    T take() throws Exception;

    /**
     * 获取队列中存储的任务实例数量.
     *
     * @return 队列中存储的任务实例数量.
     *
     * @throws Exception 如果无法判定队列中的任务实例数量.
     */
    int size() throws Exception;
}
